package com.learn._04mybatis.mapper;

import com.learn._04mybatis.pojo.Weibo;
import com.learn._04mybatis.pojo.WeiboVO1;
import com.learn._04mybatis.pojo.WeiboVO2;
import com.learn._04mybatis.pojo.WeiboVO3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
//    @Insert("insert into weibo(content,created,user_id) values (#{content},#{created},#{userId})")
    int insert(Weibo weibo);

//    @Delete("delete from weibo where id=#{id}")
    int deleteById(Integer id);

//    @Update("update weibo set content = #{content} ,created = #{created} , user_id = #{userId}")
    int update(Weibo weibo);

    //对于字段名与属性名不一致的情况时，可以为字段取别名，让别名与属性名一致即可例如：下面user_id与userId
//    @Select("select id,content,created,user_id userId from weibo where id = #{id}")
    Weibo selectById(Integer id);

    /*
    * List<Weibo> selectAll();
    * 虽然方法返回类型是List.但是这里的resultType仍然指明的是每一条记录用那个类的实例表达
    * 最终Mybatis会将结果集中每条记录用Weibo对象表示后同意放到List集合放回
    * */
//    @Select("select id,content,created,user_id userId from weibo")
    List<Weibo> selectAll();

    /*
    * 查看部分字段
    * 根据ID查看指定微博的内容和创建时间
    * */
//    @Select("select content,created from weibo where id =#{id}")
    WeiboVO1 selectWeiboVO1ById(Integer id);

//    @Select("select content,user_id userId from weibo")
    List<WeiboVO2> selectWeiboVO2All();


    int dynamicUpdate(Weibo weibo);

    int dynamicDeleteByIds(Integer[] ids);//数组和集合都可以，不过记得改一下xml中的配置collection

    int dynamicDeleteByIds2(List<Integer> ids);//数组和集合都可以，不过记得改一下xml中的配置collection

    WeiboVO3 selectWeiboVO3ById(Integer id);

    int countWeibo();
}
